package es.udc.fbellas.j2ee.tiendaweb.model.productofacade.plain.actions;


import java.sql.Connection;
import java.util.List;

import es.udc.fbellas.j2ee.tiendaweb.model.producto.DAO.SQLProductoDAO;
import es.udc.fbellas.j2ee.tiendaweb.model.producto.DAO.SQLProductoDAOFactory;
import es.udc.fbellas.j2ee.tiendaweb.model.producto.TO.ProductoTO;
import es.udc.fbellas.j2ee.tiendaweb.model.productofacade.TO.ProductoChunkTO;
import es.udc.fbellas.j2ee.util.exceptions.InternalErrorException;
import es.udc.fbellas.j2ee.util.sql.NonTransactionalPlainAction;

public class BuscarPorPalabrasYCategoriaAction 
    implements NonTransactionalPlainAction {

    private String palabras;
    private int inicio;
    private int elemPorGrupo;
    private int categoria;
    
    public BuscarPorPalabrasYCategoriaAction(String palabras,int categoria, 
        int inicio, int elemPorGrupo) {
        
        this.palabras = palabras;
        this.categoria=categoria;
        this.inicio = inicio;
        this.elemPorGrupo = elemPorGrupo;
        
    }

    /**
     *
     * @return An instance of <code>ProductoChunkVO</code> objects.
     */
    public Object execute(Connection connection) 
        throws InternalErrorException {

        /* 
         * Find count+1 accounts to determine if there exist more accounts
         * above the specified range.
         */                
        SQLProductoDAO productoDAO = SQLProductoDAOFactory.getDAO();            
        List<ProductoTO> productoTOs = productoDAO.findByNombreCategoria(
            connection, palabras,categoria, inicio, elemPorGrupo+1);
        boolean existMasProductos = productoTOs.size() == (elemPorGrupo+1);

        /* 
         * Remove the last account from the returned list if there exist more
         * accounts above the specified range.
         */
        if (existMasProductos) {
            productoTOs.remove(productoTOs.size()-1);
        }

        return new ProductoChunkTO(productoTOs, existMasProductos);                    

    }
    
    /* 
     * This class is tested by
     * "es.udc.fbellas.j2ee.minibank.model.accountfacade.delegate.
     * AccountFacadeDelegateFactory".
     */
    
}
